package Day528;
import java.sql.*;

public class DB {
    ;


    /**

     * 这是一个数据库的工具类，可以将注册驱动，连接对象，查询，添，删，改都封装成相应的方法
     */
        //1.5 设置主机，端口号，数据库，关闭SSL，启用Unicode和utf8 、用户名，密码
        private static final String url="jdbc:mysql://localhost:3306/student_db?useSSL=false&useUnicode=true&characterEncoding=utf8";
        private static final String name="root";
        private static final String pwd = "xem314159";


        // 用静态代码块，注册驱动
        static {
            try {
                Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException e) {
                throw new RuntimeException(e);
            }
        }

        // 获取连接对象
        public static Connection getConn() throws SQLException {
            //2 获取连接的对象conn
            Connection conn = DriverManager.getConnection(url, name, pwd);// Alt+回车
            return conn;
        }

        //

        /**
         * 通用的查询方法
         * @param sql 接收的SQL语句
         * @return 将查询的结果集返回给调用者
         * String ...keys ：...表示可变的参数，0个或是任意个数的参数都可以
         */
        public static ResultSet query(String sql,String ...keys) throws SQLException {
            Connection conn = getConn();
            PreparedStatement pst = conn.prepareStatement(sql);
            // 设置？的值
            // pst.setString(1,userid);
            // pst.setString(2,username);
            for (int i = 0; i < keys.length; i++) {
                // String key = keys[i];// id ,name
                pst.setString((i+1),keys[i]);
            }
            ResultSet rst = pst.executeQuery();
            return rst;
        }


        // 通用的update
        public static int update(String sql,String ...keys) throws SQLException {
            Connection conn = getConn();
            PreparedStatement pst = conn.prepareStatement(sql);
            // 设置？的值
            // pst.setString(1,userid);
            // pst.setString(2,username);
            for (int i = 0; i < keys.length; i++) {
                // String key = keys[i];// id ,name
                pst.setString((i+1),keys[i]);
            }
            int i = pst.executeUpdate();
            return i;
        }



        // 通用的释放资源的方法
        public static void close(Connection conn,PreparedStatement pst,ResultSet rst) throws SQLException {
            if (rst!=null){
                rst.close();
            }
            if (pst!=null){
                pst.close();
            }
            if (conn!=null){
                conn.close();
            }
        }

    }

